二元樹(Binary Tree)是一個常見且重要的樹狀結構,由有限節點組合而成的集合,此集合不是空集合,就是由樹根、左子樹和右子樹所組成,意思就是二元樹的分支度會小於或等於2,最多只會有兩個子節點。
二元樹和一般樹的差異:
特殊二元樹
完滿二元樹(Full Binary Tree)
假設完滿二元樹的高度為 h,則樹的節點樹為 2h-1,h ≧ 0,換句話說,除了葉節點以外,每個節點都會有兩個子節點。
如圖所示:
完整二元樹(Complete Binary Tree)
假設完整二元樹的深度為 h,則所含的節點數小於 2h-1,且其節點如完滿二元樹從左至右,由上到下的順序編號。
如圖所示:
歪斜樹(Skewed Binary Tree)
如果二元樹完全沒有右節點或左節點時,分別叫做左歪斜樹和右歪斜樹。
如圖所示:
嚴格二元樹(Strictly Binary Tree)
嚴格二元樹除了葉節點都有非空的左右子樹,也就是沒有一個節點只有一個子節點。
如圖所示:
二元樹儲存方法
一維陣列表示法
首先將二元樹假想成一個完滿二元樹,並依序存放在一維陣列中。
如圖所示:
優點:
缺點:
串列表示法
每個節點可以含有兩個指標,使用指標分別指向左邊子節點及右邊子節點。
如圖所示:
優點:
缺點:
二元樹走訪
二元樹的走訪目的在於拜訪樹中所有節點各一次,走訪的方法分為以下三種:
中序走訪 (Inorder):走訪左子樹 → 拜訪樹根 → 走訪右子樹
沿著樹的左側路徑移動,直到無法移動,再追蹤此節點,然後向右移動一節點。走訪完右子樹則返回上層的父節點,並重複左、中、右的步驟進行,直到拜訪完所有節點。
前序走訪 (Preorder):拜訪樹根 → 走訪左子樹 → 走訪右子樹
先拜訪根節點,再往左方移動,直到無法繼續,然後向右方移動,並重複此步驟進行,直到拜訪完所有節點。
後序走訪 (Postorder):走訪左子樹 → 走訪右子樹 → 拜訪樹根
先往左方移動,直到無法繼續,然後向右方移動,最後再處理根節點,並重複此步驟進行,直到拜訪完所有節點。
範例:
中序走訪順序:DBEAFCG
前序走訪順序:ABDECFG
後序走訪順序:DEBFGCA
參考資料: